#include <iostream>
#include <ratio>
#include <typeinfo>
#include <type_traits>

using namespace std;

template <size_t N>
constexpr size_t DecN = std::ratio_subtract<std::ratio<N>, std::ratio<1>>::num;

template<size_t X, size_t N>
constexpr size_t PowN = std::ratio_multiply<std::ratio<X>, std::ratio<PowN<X, DecN<N>>>>::num;

template<size_t X>
constexpr size_t PowN<X, 0> = 1;

int main()
{
	cout << "2^0\t" << PowN<2, 0> << endl;
	cout << "2^1\t" << PowN<2, 1> << endl;
	cout << "2^2\t" << PowN<2, 2> << endl;
	cout << "2^3\t" << PowN<2, 3> << endl;
	cout << "2^4\t" << PowN<2, 4> << endl;
	cout << "2^5\t" << PowN<2, 5> << endl;
	cout << "2^6\t" << PowN<2, 6> << endl;
	cout << "2^7\t" << PowN<2, 7> << endl;
	cout << "2^8\t" << PowN<2, 8> << endl;
	cout << "2^9\t" << PowN<2, 9> << endl;
	cout << "2^10\t" << PowN<2, 10> << endl;
	cout << "2^11\t" << PowN<2, 11> << endl;
	cout << "2^12\t" << PowN<2, 12> << endl;
	cout << "2^13\t" << PowN<2, 13> << endl;
	cout << "2^14\t" << PowN<2, 14> << endl;
	cout << "2^15\t" << PowN<2, 15> << endl;
	cout << "2^16\t" << PowN<2, 16> << endl;
	cout << "2^17\t" << PowN<2, 17> << endl;
	cout << "2^18\t" << PowN<2, 18> << endl;
	cout << "2^19\t" << PowN<2, 19> << endl;
	cout << "2^20\t" << PowN<2, 20> << endl;
	cout << "2^21\t" << PowN<2, 21> << endl;
	cout << "2^22\t" << PowN<2, 22> << endl;
	cout << "2^23\t" << PowN<2, 23> << endl;
	cout << "2^24\t" << PowN<2, 24> << endl;
	cout << "2^25\t" << PowN<2, 25> << endl;
	cout << "2^26\t" << PowN<2, 26> << endl;
	cout << "2^27\t" << PowN<2, 27> << endl;
	cout << "2^28\t" << PowN<2, 28> << endl;
	cout << "2^29\t" << PowN<2, 29> << endl;
	cout << "2^30\t" << PowN<2, 30> << endl;
	cout << "2^31\t" << PowN<2, 31> << endl;
	cout << "2^32\t" << PowN<2, 32> << endl;
	cout << "2^33\t" << PowN<2, 33> << endl;
	cout << "2^34\t" << PowN<2, 34> << endl;
	cout << "2^35\t" << PowN<2, 35> << endl;
	cout << "2^36\t" << PowN<2, 36> << endl;
	cout << "2^37\t" << PowN<2, 37> << endl;
	cout << "2^38\t" << PowN<2, 38> << endl;
	cout << "2^39\t" << PowN<2, 39> << endl;

	return 0;
}